package cc.ilzy.mall.product.config;

import cc.ilzy.mall.product.interceptors.UserLoginInterceptor;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.CorsRegistry;
import org.springframework.web.servlet.config.annotation.InterceptorRegistry;
import org.springframework.web.servlet.config.annotation.ResourceHandlerRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;

/**
 * 需要注意的是，直接实现 WebMvcConfigurer 不会禁用 Spring Boot 默认的静态资源映射；
 * 但如果你使用了 @EnableWebMvc 或继承了 WebMvcConfigurationSupport，
 * 默认的自动配置就会被覆盖，这时你需要手动重新配置所有必要的映射（例如 WebJars 的支持等）
 */
@Configuration
public class MallWebMvcConfig implements WebMvcConfigurer {

    @Autowired
    private UserLoginInterceptor userLoginInterceptor;

    @Override
    public void addInterceptors(InterceptorRegistry registry) {
        // 添加用户登录拦截器
        registry.addInterceptor(userLoginInterceptor).addPathPatterns("/api/cart/*/**"); // 拦截所有用户相关的请求
                // .excludePathPatterns("/api/cart/*/page"); // 排除登录和注册接口
    }

    @Override
    public void addResourceHandlers(ResourceHandlerRegistry registry) {
        // 将 /custom/** 的请求映射到 classpath 下的 my-static/ 目录
        //        registry.addResourceHandler("/static/images/**")
        //                .addResourceLocations("file:/" + ConstantUtils.FILE_UPLOAD_PATH);

        // 映射 Knife4j 的文档入口（doc.html）
        registry.addResourceHandler("/doc.html").addResourceLocations("classpath:/META-INF/resources/");

        // 映射 Knife4j 的静态资源（如 webjars 下的 JS、CSS 等）
        registry.addResourceHandler("/webjars/**").addResourceLocations("classpath:/META-INF/resources/webjars/");
        //
        // 如果项目中还有其他静态资源（如 /static 下），也可以同一映射
        registry.addResourceHandler("/**").addResourceLocations("classpath:/static/");
    }

    /**
     * 配置全局跨域
     *
     * @param registry
     */
    @Override
    public void addCorsMappings(CorsRegistry registry) {
        registry.addMapping("/api/*")
                .allowedOrigins("*")
                .allowedMethods("GET", "POST", "PUT", "DELETE", "OPTIONS")
                .allowedHeaders("*")
                .allowCredentials(true)
                .maxAge(3600);
    }

}
